package com.caizi.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.caizi.mapper.MapDataMapper;
import com.caizi.pojo.MapData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

@Service
public class MapDataService {
    @Autowired
    private MapDataMapper mapDataMapper;

    public MapData getById(Long id) {
        QueryWrapper<MapData> wrapper = new QueryWrapper<>();
        wrapper.eq("id", id); // 注意这里用数据库字段名
        return mapDataMapper.selectOne(wrapper);
    }

    // 根据key查询
    public MapData getByKey(String key) {
        QueryWrapper<MapData> wrapper = new QueryWrapper<>();
        wrapper.eq("key", key); // 注意这里用数据库字段名
        return mapDataMapper.selectOne(wrapper);
    }

    public List<MapData> listByKeyContaining(String key) {
        QueryWrapper<MapData> wrapper = new QueryWrapper<>();
        wrapper.like("`key`", "%" + key + "%"); // 需要手动处理通配符
        return mapDataMapper.selectList(wrapper);
    }

    // 根据type+subType组合查询
    public List<MapData> getByType(String type, String subType) {
        return mapDataMapper.selectList(new QueryWrapper<MapData>()
                .eq("type", type)
                .eq("subType", subType));
    }

    // 带时间范围的查询（Lambda方式更安全）
    public List<MapData> getByTimeRange(LocalDateTime start, LocalDateTime end) {
        return mapDataMapper.selectList(new LambdaQueryWrapper<MapData>()
                .between(MapData::getInsertTime, start, end));
    }

    // 新增数据
    public boolean create(MapData mapData) {
        return mapDataMapper.insert(mapData) > 0;
    }

    // 根据ID更新数据
    public boolean updateById(MapData mapData) {
        return mapDataMapper.updateById(mapData) > 0;
    }

    // 根据Key更新数据（Lambda方式）
    public boolean updateByKey(MapData mapData) {
        return mapDataMapper.update(mapData, new LambdaQueryWrapper<MapData>()
                .eq(MapData::getKey, mapData.getKey())) > 0;
    }

    // 根据ID删除
    public boolean deleteById(Long id) {
        return mapDataMapper.deleteById(id) > 0;
    }

    // 根据Key删除
    public boolean deleteByKey(String key) {
        return mapDataMapper.delete(new QueryWrapper<MapData>()
                .eq("`key`", key)) > 0;
    }

    // 组合条件删除（示例：按type+subType删除）
    public int deleteByCondition(String type, String subType) {
        return mapDataMapper.delete(new LambdaQueryWrapper<MapData>()
                .eq(MapData::getType, type)
                .eq(MapData::getSubType, subType));
    }
}